package absc.bd;

import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class ConexaoBanco {

	private String url, user, senha;
	private Connection con;
	
	public ConexaoBanco(String hostname, String porta, String user, String senha){
		//txtHostname.setText("");
		this.url = "jdbc:mysql://" + hostname + ":" + porta;
		this.user = user;
		this.senha = senha;
	}
	
	public boolean conectaBanco(){
		try{
			Class.forName("org.gjt.mm.mysql.Driver").newInstance();
			con = DriverManager.getConnection(this.url + "/", this.user, this.senha);
			return true;
		}
		catch(Exception e){			
			return false;
		}		
	}

	public void createSchema(String projectName, InputStream inputStream) throws Exception{
		FileInputStream fis;
		List<String> listaComandos;
		byte[] b;
		String str;
		StringTokenizer st;
		
		try{
			if (this.con == null)
				this.con = DriverManager.getConnection(this.url + "/", this.user, this.senha);
			
			fis = (FileInputStream) inputStream;
			listaComandos = new ArrayList<String>();
			
			b = new byte[fis.available()];
			fis.read(b);
			str = new String(b);
			
			st = new StringTokenizer(str, "\n");
			while(st.hasMoreElements()){
				String linha = st.nextToken();
				linha = linha.replace("absc.", projectName + ".");
				
				if (linha.contains("create index")){										
					int pos = linha.indexOf("on");
					String nomeIndice = linha.substring(12, pos-1);
					nomeIndice += "_" + projectName;
					String linhaNova = "create index " + nomeIndice + linha.substring(pos - 1, linha.length());
					linha = linhaNova;
				}
				else if (linha.contains("add constraint")){
					int pos = linha.indexOf("add constraint");
					String linhaNova = linha.substring(0, pos + 15);
					linha = linha.substring(pos + 15, linha.length());
					
					pos = linha.indexOf("foreign key");
					String nomeNovo = linha.substring(0, pos - 1);
					nomeNovo += "_" + projectName;
					linhaNova += nomeNovo;
					linhaNova += linha.substring(pos - 1, linha.length());
					
					linha = linhaNova;
				}
				
				listaComandos.add(linha);
			}
			
			Statement stm = this.con.createStatement();
			stm.execute("CREATE DATABASE " + projectName  + ";");
			
			for(String comando: listaComandos){
				stm.execute(comando);
			}
		}
		catch(Exception e){
			throw e;
		}
	}
}
